package com.xmy.study.util;

import java.util.HashMap;
import java.util.Map;

/**
 * 下述工具类中，使用了两个Map来存储中英文符号的对应关系。
 * 在转换中文符号为英文符号时，先判断中文符号是否在Map中存在对应的英文符号，
 * 如果存在则返回对应的英文符号，否则返回原始中文符号。在转换英文符号为中文符号时，也是类似的方法。
 */

/**
 * 中英文符号转换
 */
public class SymbolConversionUtils {
    /**
     * 中文转英文
     */
    private static final Map<String, String> CHINESE_TO_ENGLISH_SYMBOLS_MAP = new HashMap<>();

    /**
     * 英文转中文
     */
    private static final Map<String, String> ENGLISH_TO_CHINESE_SYMBOLS_MAP = new HashMap<>();

    static {
        CHINESE_TO_ENGLISH_SYMBOLS_MAP.put("。", ".");
        CHINESE_TO_ENGLISH_SYMBOLS_MAP.put("，", ",");
        CHINESE_TO_ENGLISH_SYMBOLS_MAP.put("？", "?");
        CHINESE_TO_ENGLISH_SYMBOLS_MAP.put("！", "!");
        CHINESE_TO_ENGLISH_SYMBOLS_MAP.put("（", "(");
        CHINESE_TO_ENGLISH_SYMBOLS_MAP.put("）", ")");
        CHINESE_TO_ENGLISH_SYMBOLS_MAP.put("【", "[");
        CHINESE_TO_ENGLISH_SYMBOLS_MAP.put("】", "]");
        CHINESE_TO_ENGLISH_SYMBOLS_MAP.put("《", "<");
        CHINESE_TO_ENGLISH_SYMBOLS_MAP.put("》", ">");
        CHINESE_TO_ENGLISH_SYMBOLS_MAP.put("‘", "'");
        CHINESE_TO_ENGLISH_SYMBOLS_MAP.put("’", "'");

        ENGLISH_TO_CHINESE_SYMBOLS_MAP.put(".", "。");
        ENGLISH_TO_CHINESE_SYMBOLS_MAP.put(",", "，");
        ENGLISH_TO_CHINESE_SYMBOLS_MAP.put("?", "？");
        ENGLISH_TO_CHINESE_SYMBOLS_MAP.put("!", "！");
        ENGLISH_TO_CHINESE_SYMBOLS_MAP.put("(", "（");
        ENGLISH_TO_CHINESE_SYMBOLS_MAP.put(")", "）");
        ENGLISH_TO_CHINESE_SYMBOLS_MAP.put("[", "【");
        ENGLISH_TO_CHINESE_SYMBOLS_MAP.put("]", "】");
        ENGLISH_TO_CHINESE_SYMBOLS_MAP.put("<", "《");
        ENGLISH_TO_CHINESE_SYMBOLS_MAP.put(">", "》");
    }

    /**
     * 将中文符号转换为英文符号
     *
     * @param chineseSymbol 中文符号
     * @return 英文符号
     */
    public static String chineseToEnglishSymbol(String chineseSymbol) {
        return CHINESE_TO_ENGLISH_SYMBOLS_MAP.getOrDefault(chineseSymbol, chineseSymbol);
    }

    /**
     * 将英文符号转换为中文符号
     *
     * @param englishSymbol 英文符号
     * @return 中文符号
     */
    public static String englishToChineseSymbol(String englishSymbol) {
        return ENGLISH_TO_CHINESE_SYMBOLS_MAP.getOrDefault(englishSymbol, englishSymbol);
    }

    /**
     * 将字符串中的中文符号转换为英文符号
     *
     * @param chineseString 中文字符串
     * @return 英文字符串
     */
    public static String chineseToEnglishString(String chineseString) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < chineseString.length(); i++) {
            String chineseSymbol = String.valueOf(chineseString.charAt(i));
            String englishSymbol = chineseToEnglishSymbol(chineseSymbol);
            sb.append(englishSymbol);
        }
        return sb.toString();
    }

    /**
     * 将字符串中的英文符号转换为中文符号
     *
     * @param englishString 英文字符串
     * @return 中文字符串
     */
    public static String englishToChineseString(String englishString) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < englishString.length(); i++) {
            String englishSymbol = String.valueOf(englishString.charAt(i));
            String chineseSymbol = englishToChineseSymbol(englishSymbol);
            sb.append(chineseSymbol);
        }
        return sb.toString();
    }
}
